
import router, { asyncRoutes } from './router'
import store from './store'

import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式

const whitelist = ['/login', '/404']
// 前置守卫
router.beforeEach(async(to, from, next) => {
  NProgress.start()

  const token = store.getters.token
  if (token) { // 有没有token
    if (!store.getters.userId) {
      const { roles } = await store.dispatch('user/getUserInfo') // 用户信息数据在这里调用
      // 如果说后续 需要根据用户资料获取数据的话 这里必须改成 同步
      // 筛选用户的可用路由
      // actions中函数 默认是Promise对象 调用这个对象 想要获取返回的值话 必须 加 await或者是then
      // actions是做异步操作的
      const route = asyncRoutes.filter(item => roles.menus.includes(item.name))
      store.commit('permission/setRoutes', route)
      router.addRoutes([...route, { path: '*', redirect: '/404', hidden: true }])
      // const route = await store.dispatch('permission/filterRoutes', roles.menus)
      // // routes就是筛选得到的动态路由
      // // 动态路由 添加到 路由表中 默认的路由表 只有静态路由 没有动态路由
      // // addRoutes  必须 用 next(地址) 不能用next()
      // console.log(route)
      // router.addRoutes([...route, { path: '*', redirect: '/404', hidden: true }]) // 添加到路由表
      // 添加完动态路由之后
      next(to.path) // 相当于跳到对应的地址  相当于多做一次跳转 为什么要多做一次跳转
      // 进门了，但是进门之后我要去的地方的路还没有铺好，直接走，掉坑里，多做一次跳转，再从门外往里进一次，跳转之前 把路铺好，再次进来的时候，路就铺好了
    } else {
      next()
    }
    // if (to.path === '/login') { // 有token还要去登录的话
    //   next('/')// 直接跳转到首页
    // }
    // else {
    //   next()// 放行
    // }
  } else {
    if (whitelist.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
  }
  NProgress.done()
})
// 后置守卫
router.afterEach((to) => {
  to.meta.title ? document.title = '人力资源管理系统-' + to.meta.title : document.title = '人力资源管理系统'
  NProgress.done()
})
